Skip to content

Conversation

Samik081
Copy link

@Samik081 Samik081 commented May 4, 2022

@carsonbot carsonbot added this to the 6.1 milestone May 4, 2022
@wouterj wouterj modified the milestones: 6.1, next May 4, 2022
@wouterj wouterj added the Waiting Code Merge Docs for features pending to be merged label May 4, 2022
@Samik081 Samik081 force-pushed the amqp-exch2exch-binding-docs branch from ebf629c to 801bcf8 Compare May 23, 2022 09:48
@Samik081 Samik081 changed the base branch from 6.1 to 6.2 May 23, 2022 09:49
@Samik081 Samik081 force-pushed the amqp-exch2exch-binding-docs branch from 801bcf8 to 6477337 Compare May 31, 2022 08:52
@Samik081 Samik081 force-pushed the amqp-exch2exch-binding-docs branch from 6477337 to bc19829 Compare June 14, 2022 09:59
@Samik081 Samik081 force-pushed the amqp-exch2exch-binding-docs branch from bc19829 to e3f18ed Compare August 3, 2022 14:28
@Samik081 Samik081 force-pushed the amqp-exch2exch-binding-docs branch from e3f18ed to 1ebd353 Compare January 4, 2023 12:15
@Samik081 Samik081 requested a review from xabbuh as a code owner January 4, 2023 12:15
@Samik081 Samik081 changed the base branch from 6.2 to 6.3 January 4, 2023 12:16
@Samik081 Samik081 force-pushed the amqp-exch2exch-binding-docs branch from 1ebd353 to 75b60c6 Compare September 4, 2025 09:51
@Samik081 Samik081 requested a review from OskarStark as a code owner September 4, 2025 09:51
@Samik081 Samik081 changed the base branch from 6.3 to 7.4 September 4, 2025 09:52
@Samik081 Samik081 force-pushed the amqp-exch2exch-binding-docs branch from 75b60c6 to 0f644ca Compare September 8, 2025 08:21
fabpot added a commit to symfony/symfony that referenced this pull request Sep 17, 2025
…mik081)

This PR was squashed before being merged into the 7.4 branch.

Discussion
----------

[Messenger] Add AMQP exchange to exchange bindings

## Q/A
| Q             | A
| ------------- | ---
| Branch?       | 7.4
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        | symfony/symfony-docs#16783

## Changes description
This PR introduces very similar changes to this one: #34737, which was closed due to the lack of the feedback.
I'd like to continue this topic, share the missing feedback and discuss it further if needed.

I have introduced the possibility to configure `exchange-to-exchange` bindings in `amqp` transport. This feature uses `\AMQPExchange::bind()` method already provided by the stub in `php-amqp/php-amqp`: https://github.com/php-amqp/php-amqp/blob/bb7611220e341039a7f5d72e606ca1e16eda4642/stubs/AMQPExchange.php#L22

Example `messenger.yaml`:
```yaml
framework:
    messenger:
        transports:
            some_transport:
                dsn: 'amqp://'
                options:
                    exchange:
                        type: topic
                        name: some_exchange
                        bindings: # added configuration
                            another_exchange:
                                binding_keys:
                                    - key1
                                    - key2
                                binding_arguments:
                                    x-match: all
```
With the above configuration, the `Connection` class creates `some_exchange` and binds it to `another_exchange` using `['key1', 'key2']` keys and `[x-match =>'all']` arguments.

## Reasoning

Binding an exchange to an exchange feature can be used to create more complex RabbitMQ topologies. It is also briefly described here: https://www.cloudamqp.com/blog/exchange-to-exchange-binding-in-rabbitmq.html

A real-world example could be kind of RabbitMQ publisher/subscriber pattern implementation between microservices, that could be visualized as follows:

![rabbitmq](https://user-images.githubusercontent.com/13415865/166811854-7d8b50e9-85c4-448c-a514-1449b3778cae.png)

In the above example (all the exchanges in this example are of the `topic` type):
```
App `Foo` publishes events to its own exchange AND subscribes to the events that app `Bar` publishes on its exchange.
App `Bar` publishes events to its own exchange AND subscribes to the events that app `Foo` publishes on its exchange.
App `...` subscribes to the events that apps `Foo` and `Bar` publish on their exchanges.
```

This approach might have few advantages, such as easier maintainability, dependency management and monitoring, or better separation between microservices.

### My thoughts
I feel that the fact, that https://github.com/php-amqp/php-amqp has `\AMQPExchange::bind()` implemented is already sufficient reason to have this supported in `symfony/amqp-messenger`. I am aware this feature might be rarely used, but it's already there in the extension, and having the ability to use it within `amqp-messenger` seems reasonable to me.

Commits
-------

9fd9049 [Messenger] Add AMQP exchange to exchange bindings
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Messenger Status: Needs Review Waiting Code Merge Docs for features pending to be merged
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants